---
title: "Java数据库读写分离"
date: 2019-1-15
categories:
- java
tags:
---

<div id="content">
<div id="table-of-contents">
<h2>Table of Contents</h2>
<div id="text-table-of-contents">
<ul>
<li><a href="#org38c9c7c">Intro</a>
<ul>
<li><a href="#orgf88d8b9">AbstractRoutingDataSource</a></li>
</ul>
</li>
</ul>
</div>
</div>
<div class="outline-2" id="outline-container-org38c9c7c">
<h2 id="org38c9c7c">Intro</h2>
<div class="outline-text-2" id="text-org38c9c7c">
<p>
读写分离：处理多个数据库。
java中每个数据库使用一个DataSource接口表示，DataSource接口只有两个方法，都是用于获取连接的：
</p>
<ul class="org-ul">
<li>Connection getConnection() throws SQLException</li>
<li>Connection getConnection(String username, String password) throws SQLException</li>
</ul>
<p>
DataSource的实现，有简单的：每次创建新连接；也有复杂的，连接池机制的。
</p>
<p>
上层在执行SQL的时候，会通过DataSource的这两个方法取出一个连接，所以实现读写分离，一个方法就是在DataSource上做文章：
实现一个自己的DataSource，组合多个实际的DataSource，然后在执行SQL的时候切换到正确的DataSource。
由于DataSource只有两个接口，所以实现起来很容易。
</p>
<p>
而Spring框架已经有了这么一个基类：AbstractRoutingDataSource。
</p>
</div>
<div class="outline-3" id="outline-container-orgf88d8b9">
<h3 id="orgf88d8b9">AbstractRoutingDataSource</h3>
</div>
</div>
</div>
<div class="status" id="postamble">
<p class="date">Date: 2019-1-15</p>
<p class="author">Author: gdme1320</p>
<p class="validation"><a href="http://validator.w3.org/check?uri=referer">Validate</a></p>
</div>
